<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="js/1.4.8/angular.js"></script>
    <script src="js/1.4.8/angular-route.js"></script>
    <style type="text/css">
        body {
            font-size: 1.5em;
        }

        .div {
            background-color: #2a6496;
            width: 780px;
            padding: 8px;
            color: #fff;
        }
    </style>
</head>
<body>
<div class="div" ng-controller="myCtrl">
    <span>{{name}}</span>
    <span>{{email}}</span>
    <br>
    <span>{{say()}}</span>
    <br>

</div>
<script type="application/javascript">
    var app = angular.module("app", []);
    // 使用service方法自定义服务，此方法还可以接收一个构造函数
    //当注入该服务时，通过该函数并使用new关键字来实例化服务对象

    // 使用service方法可以返回构造函数，因此，在这个服务返回的函数中，能通过this方式添加
    // 两个属性和一个方法，用于注入服务时的回调。
    app.service("$student", function () {
        this.name = "江俊";
        this.email = "1137829446@qq.com";
        this.say = function () {
            return 'hello,angular!';
        }
    });

    // factory不接受构造函数，只是接收一些对象或者函数，除非进行new实例化
    app.factory("$student2", function () {
       return new function () {
           this.name = "江俊";
           this.email = "1137829446@qq.com";
           this.say = function () {
               return 'hello,angular!';

           }
       }
    });

    // angualr检测到是service创建的服务，会自动通过关键字new来实例化这个服务，生成服务对象
    // 因此，在控制器中能通过这个服务对象访问函数中的属性和方法
    /*app.controller("myCtrl", ["$scope", "$student", function ($scope, $student) {
        $scope.name = $student.name;
        $scope.email = $student.email;
        $scope.say = function () {
            return $student.say();
        }
    }]);*/
    app.controller("myCtrl", ["$scope", "$student2", function ($scope, $student2) {
        $scope.name = $student2.name;
        $scope.email = $student2.email;
        $scope.say = function () {
            return $student2.say();
        }
    }]);
</script>
</body>
</html>